package main

/**
 * @Author: DengLibin
 * @Date: Create in 2022-12-26 16:04:03
 * @Description: colly爬虫
 */
import (
	"fmt"
	"strings"

	"denglibin.io/common/log"
	"denglibin.io/common/util"
	"github.com/gocolly/colly/v2"
	"github.com/sirupsen/logrus"
)

func demo() {
	log.InitLog()

	// 初始化默认的收集器
	c := colly.NewCollector(
		// 设置只访问设定的域名
		colly.AllowedDomains("douban.com", "www.douban.com"),
		colly.UserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.46"),
	)

	// c.WithTransport(&http.Transport{
	// 	Proxy: http.ProxyFromEnvironment,
	// 	DialContext: (&net.Dialer{
	// 		Timeout:   30 * time.Second,
	// 		KeepAlive: 30 * time.Second,
	// 		DualStack: true,
	// 	}).DialContext,
	// 	MaxIdleConns:          100,
	// 	IdleConnTimeout:       90 * time.Second,
	// 	TLSHandshakeTimeout:   10 * time.Second,
	// 	ExpectContinueTimeout: 1 * time.Second,
	// })

	// 对于每一个包含href属性的a元素，执行回调
	c.OnHTML("a[href]", func(e *colly.HTMLElement) {
		link := e.Attr("href")
		// 输出链接
		fmt.Printf("Link found: %q -> %s\n", e.Text, link)
		// 访问链接
		c.Visit(e.Request.AbsoluteURL(link))
	})

	// 在进行每个请求前输出URL
	c.OnRequest(func(r *colly.Request) {
		logrus.Info("访问:", r.URL.String())
	})

	//错误时的回调
	c.OnError(func(r *colly.Response, err error) {
		logrus.Error("发生错误", err)
	})

	// 开始爬取
	c.Visit("https://www.douban.com/")
}

// https://www.zei8.vip/

/**
 * @Author: DengLibin
 * @Date: Create in 2022-12-26 16:51:01
 * @Description: 小说下载
 */
func get_zei8() {
	log.InitLog()

	// 初始化默认的收集器
	c := colly.NewCollector(
		// 设置只访问设定的域名
		colly.AllowedDomains("zei8.vip", "www.zei8.vip"),
		colly.UserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.46"),
	)

	// 在进行每个请求前输出URL
	c.OnRequest(func(r *colly.Request) {
		//logrus.Info("访问:", r.URL.String())
	})
	// 检测响应
	c.OnResponse(func(r *colly.Response) {

	})

	// 对于每一个包含href属性的a元素，执行回调
	// 获取小说详情地址
	c.OnHTML(".listbox ul li dl a[href]", func(e *colly.HTMLElement) {
		//logrus.Info("当前页地址:", e.Request.URL.Path)
		link := e.Attr("href")
		// 访问详情
		//logrus.Info("详情页地址:", link)
		c.Visit(e.Request.AbsoluteURL(link))
	})
	//获取详情中的下载页地址
	c.OnHTML(".downurllist strong a[href]", func(e *colly.HTMLElement) {
		link := e.Attr("href")

		//logrus.Info("下载页地址:", link)
		// 访问下载页
		c.Visit(e.Request.AbsoluteURL(link))

	})
	//下载页
	c.OnHTML(".downfile  a[href]", func(e *colly.HTMLElement) {

		link := e.Attr("href")
		if e.Text == "线路一" {
			logrus.Info("下载地址:", link)
			//下载
			arr := strings.Split(link, "/")
			file_name := arr[len(arr)-1]
			//下载文件
			util.DownFile(link, file_name)
		}

	})

	//错误时的回调
	c.OnError(func(r *colly.Response, err error) {
		logrus.Error("发生错误", err)
	})

	// 开始爬取
	c.Visit("https://www.zei8.vip/xuanhuan/index.html")
}
func main() {

	get_zei8()
}
